package com.cropdoctor.model.constants;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Component
public class FruitAndVegetableClassification {
    // 接口路径字段
    @Value("${dis.cornPath}")
    public String corn;

    @Value("${dis.orangePath}")
    public String orange;

    @Value("${dis.applePath}")
    public String apple;

    @Value("${dis.strawberryPath}")
    public String strawberry;

    @Value("${dis.chiliPath}")
    public String chili;

    @Value("${dis.grapePath}")
    public String grape;

    @Value("${dis.cherryPath}")
    public String cherry;

    @Value("${dis.potatoPath}")
    public String potato;

    @Value("${dis.tomatoPath}")
    public String tomato;

    @Value("${dis.peachPath}")
    public String peach;

    @Value("${dis.orangeHost}")
    public String orangeHost;

    @Value("${dis.appleHost}")
    public String appleHost;

    @Value("${dis.strawberryHost}")
    public String strawberryHost;

    @Value("${dis.chiliHost}")
    public String chiliHost;

    @Value("${dis.grapeHost}")
    public String grapeHost;

    @Value("${dis.cherryHost}")
    public String cherryHost;

    @Value("${dis.potatoHost}")
    public String potatoHost;

    @Value("${dis.tomatoHost}")
    public String tomatoHost;

    @Value("${dis.peachHost}")
    public String peachHost;

    // 反射缓存
    private final Map<String, Field> pathFieldCache = new ConcurrentHashMap<>();

    /**
     * 根据传入的字符串获取对应的接口路径
     * @param key 配置键（如"corn", "orange"）
     * @return 对应的接口路径，未找到时返回null
     */
    public String getPathByKey(String key) {
        try {
            // 使用缓存提高反射性能
            Field field = pathFieldCache.computeIfAbsent(key, k -> {
                try {
                    // 获取公共字段（注意字段名与key完全一致）
                    return this.getClass().getField(k);
                } catch (NoSuchFieldException e) {
                    return null;
                }
            });

            if (field != null) {
                return (String) field.get(this);
            }
            return null;
        } catch (IllegalAccessException e) {
            return null;
        }
    }

    /**
     * 获取主机地址（处理特殊命名字段）
     */
    public String getHostByKey(String key) {
        try {
            // 其他主机字段命名规则为 key + "Host"
            Field hostField = this.getClass().getField(key + "Host");
            return (String) hostField.get(this);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            return null;
        }
    }
}